require('module-alias/register')

// 先获得环境变量。
const env = require('./process.env.js');

const fastify = require("fastify")({ logger : {
    level: env.LOGGER_LEVEL,
} });
const mysql = require("mysql2/promise");


fastify.env = {...env}
const redis = require('@fastify/redis');
// 添加跨域支持
const cors = require('@fastify/cors')
fastify.register(cors, {
  origin: '*',
  methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS']
})

// 创建连接池
// const pool = mysql.createPool({
//   host: fastify.env.ENV_DB_HOST, // 数据库地址
//   user: fastify.env.ENV_DB_USER, // 数据库用户
//   password: fastify.env.ENV_DB_PSW, // 数据库密码
//   database: fastify.env.ENV_DB, // 选中数据库
//   waitForConnections: true, // 当无连接池可用时，等待（true）还是抛错（false）
//   connectionLimit: 10, // 连接数限制
//   queueLimit: 0 // 最大连接等待数（0为不限制）
// });
// // 将连接池挂载到fastify实例上
// fastify.decorate("mysql", pool);
// 连接redis
// 若启动失败可以将mysql和redis相关代码进行注释或修改env文件配置
// fastify.register(redis, {
//   host: fastify.env.ENV_REDIS_HOST,
//   port: fastify.env.ENV_REDIS_PORT, // Redis port
//   password: fastify.env.ENV_REDIS_PSW,
//   family: 4
// })

// mongodb
// mongodb - api =>>> http://mongodb.github.io/node-mongodb-native/3.3/api/index.html
// fastify.register(require('@fastify/mongodb'), {
//     // force to close the mongodb connection when app stopped
//     // the default value is false
//     forceClose: true,
//     url: fastify.env.ENV_MONGODB_URL
// })


fastify.ready(err => {
    // req.redis // 是undefined
    // await fastify.redis.set('exampleKey', 'This is an example value');
    // const value = await fastify.redis.get('exampleKey');
    // console.log('-----value----',value);

// // 此时应当可以正确打印mongo客户端实例
//     console.log('---fastify--',fastify.mongo)
//     const users = fastify.mongo.db.collection('users');
//
//     users.insertOne({"name":"112321"}).then( res =>{
//         console.log('---fastify--res',res)
//     });
//     console.log(users);
//     const find = users.find().toArray().then( res =>{
//         console.log('---fastify--find',res)
//     });
    console.info(`server listening on http://${fastify.env.ENV_HOST}:${fastify.env.ENV_PORT}`)
    console.info(`docs api on http://${fastify.env.ENV_HOST}:${fastify.env.ENV_PORT}/docs`)
});


fastify.addHook('preHandler', function (req, reply, done) {
    if (req.body) {
        req.log.info({ body: req.body }, 'parsed body')
    }
    done()
})
module.exports = fastify;
